C++ ifstream 到 char *
全部标签 我正在浏览一本C++教科书,作为C++编程的复习。其中一个练习题(不涉及太多细节)要我定义一个可以作为参数传递ifstream或cin(例如istream)的函数。从那里,我必须通读流。麻烦的是,我想不出一种方法让这个one函数使用cin和ifstream来有效地找到流的结尾。即,while(input_stream.peek()!=EOF)不适用于cin。我可以重新设计该函数以查找某个短语(例如“#EndofStream#”或其他内容),但我认为如果我传递的文件流具有这个确切的短语,这是一个坏主意。我曾想过使用函数重载,但到目前为止这本书已经提到了它要我这样做的时间。我可能在这个练习
我想转换一个vector到std::string并以一种方式进行转换。我快到了,但下面代码的结果是vector,而我想要一个字符串(vector中所有字符串部分的串联)。有关详细信息,请参阅我的代码示例。stringConvertHexToAscii(constcharinput){std::ostringstreamoss;oss(input);returnoss.str();}vectorreadBuffer;//thisismyinputreadBuffer.push_back(0x1c);readBuffer.push_back(0x09);vectorresultVec;st
我有chart[200];cin.get(s,200);inti=5;intj=10;除了将每个元素分别复制到另一个数组之外,是否有任何简单的方法可以从t获取substriing(i,j)?没有strings等。只有chart[200]。 最佳答案 如果允许修改t,可以将t[j]设置为0,然后使用t+i获取子字符串。如果没有,您将不得不制作一份拷贝。也就是说,您为什么不能只使用std::string来避免让自己头疼呢? 关于c++-C++中char[]的子串,我们在StackOverfl
我有一个函数f返回一个char*。函数文档说:Theusermustdeletereturnedstring我想从中构造一个std::string。要做的琐碎的事情是:char*cstring=f();std::strings(cstring);deletecstring;是否可以使用C++功能做得更好?我想写类似的东西std::string(cstring)避免泄漏。 最佳答案 std::string将制作一个空终止字符串参数的拷贝并管理该拷贝。没有办法让它拥有您传递给它的字符串的所有权。所以你所做的是正确的,我建议的唯一改进是检
我想了解指针是如何工作的,所以我创建了这个小程序。首先我创建一个p指针,它指向一个char。第一个问题就到这里了。如果我创建一个指针,它的值是一个内存地址(如果我将它指向一个非指针对象),但这次在我的例子中它是“哈哈”。为什么它在char*中以这种方式工作?以及如何使用cin>>p为其增加值(value)?我的第二个问题是,我创建了一个q字符,它在我创建它时具有*p指针的值。但是它的值和地址也是“h”,但为什么呢?一定是这个char对象的内存地址!这是毫无意义的:D(mingw-gcc)#includeintmain(){/*char*p;cin>>p;//forexample:hah
这个问题直接关系到usingcharasakeyinstdmap.我了解传入的比较函数的作用以及为什么char*类型需要它作为键。但是,我不确定更新的实际工作方式。我很好奇您更新key的情况。std::map如何知道如何比较constchar*之间的相等性,cmp_str只告诉map插入键的顺序那个树。我已经深入研究了STL_tree.h代码(pulledfromhere),但没有找到太多。我唯一的猜测是它在进行直接内存比较。我对底层STL_tree类如何处理这种情况很感兴趣,或者如果它不能始终正确处理,会出现什么边缘情况?代码#include#include#includestruc
我在使用VisualStudio2010和C++时遇到了一些奇怪的行为。我有一个头文件,我在其中声明了一些全局常量#ifndefCONSTANTS_H#defineCONSTANTS_H#defineWIN32_LEAN_AND_MEAN//Macros...#defineSAFE_RELEASE(ptr){if(ptr){ptr->Release();ptr=NULL}}#defineSAFE_DELETE(ptr){if(ptr){deleteptr;ptr=NULL;}}//Constants...constchar*CLASS_NAME="WinMain";constcharG
问题:我有一个我没想到的奇怪问题。我有一个名为答案的类(class)在标题中是这样的:classAnswer{char*aText;boolb_correct;public:Answer():aText(0){;}//defaultconstructor}主要(测试)驱动程序代码是这样的:intmain(void){staticconstunsignedintMAX_ANSWERS=5;Answeranswers[MAX_ANSWERS];}我得到的(意想不到的)怪事是发生了一个分配,而且我还没有在我的代码中的任何地方使用一个新的。我猜char*正在初始化列表中调用它。我正在使用val
所以我试图将来自libcURLHTTP请求的响应存储到C字符串中,以便稍后解析。响应代码完全是用C编写的,而其他所有内容都是用C++编写的,对于任何其他C++编译器,它应该可以正常工作。但是当我尝试编译时,即使我在文件名后跟“-xc”参数,我也会得到这些特定的响应。g++main.cpp-xccJSON.c-xcrespbuffer.c-lcurl-lm./respbuffer.c:14:9:error:assigningto'char*'fromincompatibletype'void*'s->ptr=malloc(s->len+1);^~~~~~~~~~~~~~~~~./resp
我正在查看以下代码(简化)并问自己使用此returnMsg函数有多安全:#includeusingnamespacestd;constchar*returnMsg(constchar*msg){staticstd::stringmessage;message=msg;returnmessage.c_str();}intmain(intargc,char*argv[]){constchar*msg1=returnMsg("Helloworld");printf("msg1=%p\n",msg1);cout输出是:msg1=0x23a6028Helloworldmsg2=0x23a6028